TF(Trusted Firmware)是ARM的安全解決方案,為安全性提供了整體解決方案。
這個 TF-A 可以符合大多數 SoC 廠商的 CPU 設計 , 他會負責幫我們將各個部分依照順序載入,並且去驗證個個步驟是否正確。
像是之後會說明的 Optee , Uboot , Linux 等等。
在 STM32MPU 當中 ,它其實就是第一階段引導程式(FSBL)。
下圖是 ST官方對TF-A 每個步驟的說明
TF-A 的載入步驟
BL1是啟動的第一階段,被設計為充當ROM代碼,它在內部的RAM當中載入並執行。
STM32 MPU不使用此階段。因為 STM32 MPU 有自己的 ROMCode 來代替這個部分,所以下一階段 BL2 就是第一個要執行的 TF-A bin 檔案。
BL2負責載入下一階段的鏡像(安全OR不安全的 像是 OPTEE)。
BL2在這個階段必須初始化所有需要的周邊設備。
在結束時,會載入BL32和(BL33) ,BL2跳到BL32 (AArch32)。
這裡先不說 因為 AArch32 沒有
就是 Optee , 安全功能。BL32作為安全監視器,為不安全的作業系統提供安全服務。這些服務由帶有安全監視器呼叫的非安全軟體呼叫。
BL33不會放在TF-A當中,這是TF-A載入的第一個非安全的程式。在引導程式當中,這是第二個引導程式(SSBL),對於STM32 MPU來說,SSBL預設會是U-Boot。
TF-A可以用設備樹(Devices tree )來設定管理相關介面或周邊設備。在BL2階段的時候,可以想像它是Linux Kernel 的簡化版,在過程當中只使用所需的設備 (Ex : DDR EMMC SD 等等)。
可以到官網去載下來看看 : TF-A官網: https://www.trustedfirmware.org/
STM Wiki 上的 BSP 當中其實也包含了,也可以從 BSP 當中去了解。
目錄/文件 | 說明 |
---|---|
bl1、bl2、bl31、bl32 | 主要放 TF-A 每一個啟動階段的引導程式的程式碼。 |
common | 公共的通用程式碼,可以被各個階段去使用。 |
drivers | 裝置驅動程式的程式碼,用來跟處理器和周邊裝置進行通訊。 |
docs | 專案的相關文件、使用者手冊、開發手冊等等 |
include | 就是我們常說的 header 檔案 |
lib | 一些通用的lib。 |
Makefile、Makefile.sdk | 用來建立專案的Makefile 檔案,定義了編譯、連結和建置過程中的規則和命令。 |
plat | 存放針對特定平台的程式碼或配置,像是常見的 NXP 、 ST 、Ateml等等 |
services | 輔助工具,用來 Debug or Build 專案。 |
當燒錄到板子上並選擇了對應的 boot 模式後,就可以上電來測試看看。一上電 終端其實就會 Print 出很多的相關資訊。
NOTICE: CPU: STM32MP157AAC Rev.Z
NOTICE: Model: STMicroelectronics STM32MP157A-DK1 Discovery Board
INFO: Reset reason (0x15):
INFO: Power-on Reset (rst_por)
INFO: Using EMMC
INFO: Instance 2
INFO: Boot used partition fsbl1
NOTICE: BL2: v1.6-r3.0(debug):d64a19a
NOTICE: BL2: Built : 15:17:50, Feb 3 2021
INFO: BL2: Doing platform setup
INFO: RAM: DDR3-1066/888 bin G 2x4Gb 533MHz v1.45
INFO: Memory size = 0x40000000 (1024 MB)
INFO: BL2 runs SP_MIN setup
INFO: BL2: Loading image id 4
INFO: Loading image id=4 at address 0x2ffef000
INFO: Image id=4 loaded: 0x2ffef000 - 0x30000000
INFO: BL2: Loading image id 5
INFO: Loading image id=5 at address 0xc0100000
INFO: STM32 Image size : 823559
WARNING: Skip signature check (header option)
INFO: Image id=5 loaded: 0xc0100000 - 0xc01c9107
NOTICE: BL2: Booting BL32
INFO: Entry point address = 0x2ffef000
INFO: SPSR = 0x1d3
INFO: Cannot find st,stpmic1 node in DT
NOTICE: SP_MIN: v1.6-r3.0(debug):d64a19a
NOTICE: SP_MIN: Built : 15:17:50, Feb 3 2021
INFO: ARM GICv2 driver initialized
INFO: stm32mp HSE (20): Secure only
INFO: stm32mp PLL2 (27): Secure only
INFO: stm32mp PLL2_R (30): Secure only
INFO: SP_MIN: Initializing runtime services
INFO: SP_MIN: Preparing exit to normal world
U-Boot 2018.11-stm32mp-r4-g569038fc (Feb 11 2022 - 03:03:27 +0000)
CPU: STM32MP157AAC Rev.Z
Model: STMicroelectronics STM32MP157A-DK1 Discovery Board
Board: stm32mp1 in trusted mode (st,stm32mp157a-dk1)
DRAM: 1 GiB